class Solution {
public:
    int maxTotalReward(vector<int>& rewardValues) {
        ranges::sort(rewardValues);
        rewardValues.erase(unique(rewardValues.begin(), rewardValues.end()), rewardValues.end());
        bitset<100000> bs{1};

        int n = rewardValues.size();
        for(int v : rewardValues)
        {
            int shift = bs.size() - v;
            bs |= bs << shift >> (shift - v);
        }

        for(int i = 2 * rewardValues.back() - 1; i >= 1; --i)
        {
            if(bs.test(i))
                return i;
        }
        return -1;
    }
};
